package com.me.decorator;

/**
 * 装饰者模式
 */
public class CoffeeBar {

    public static void main(String[] args) {
        // 装饰者模式下的订单：2份巧克力+一份牛奶的LongBlack
        System.out.println("=================== 2份巧克力+1份牛奶的LongBlack ========================");

        // 1. 点一份 LongBlack
        Drink order = new LongBlack();
        System.out.println("order LongBlack 费用 = " + order.cost());
        System.out.println("order LongBlack 描述 = " + order.getDes());

        // 2. order 加入一份牛奶
        order = new Milk(order);
        System.out.println("order 加入1份牛奶 费用 = " + order.cost());
        System.out.println("order 加入1份牛奶 描述 = " + order.getDes());

        // 3. order 加入一份巧克力
        order = new Chocolate(order);
        System.out.println("order 加入1份牛奶 加入1份巧克力 费用 = " + order.cost());
        System.out.println("order 加入1份牛奶 加入1份巧克力 描述 = " + order.getDes());

        // 3. order 再加入一份巧克力
        order = new Chocolate(order);
        System.out.println("order 加入1份牛奶 加入2份巧克力 费用 = " + order.cost());
        System.out.println("order 加入1份牛奶 加入2份巧克力 描述 = " + order.getDes());

        System.out.println("======================= 只加入1份牛奶的无因咖啡 ============================");

        // 1. 一杯无因咖啡
        Drink order2 = new DeCaf();
        System.out.println("order2 无因咖啡 费用 = " + order2.cost());
        System.out.println("order2 无因咖啡 描述 = " + order2.getDes());

        // 2. order2 加入一份牛奶
        order2 = new Milk(order2);
        System.out.println("order2 无因咖啡 加入1份牛奶 费用 = " + order2.cost());
        System.out.println("order2 无因咖啡 加入1份牛奶 描述 = " + order2.getDes());
    }

}
